package cn.txm.pet.service.impl;

import cn.txm.basic.domain.Point;
import cn.txm.basic.service.impl.BaseServiceImpl;
import cn.txm.basic.util.AjaxResult;
import cn.txm.basic.util.DistanceUtil;
import cn.txm.org.domain.Shop;
import cn.txm.org.mapper.ShopMapper;
import cn.txm.pet.domain.Adopt;
import cn.txm.pet.domain.Pet;
import cn.txm.pet.domain.PetDetail;
import cn.txm.pet.mapper.AdoptMapper;
import cn.txm.pet.mapper.PetMapper;
import cn.txm.pet.service.IAdoptService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

@Service
public class AdoptServiceImpl extends BaseServiceImpl<Adopt> implements IAdoptService {
    @Autowired
    private ShopMapper shopMapper;

    @Autowired
    private AdoptMapper adoptMapper;

    @Autowired
    private PetMapper petMapper;
    /**
     * 前台用户发布宠物寻主消息
     * @param adopt
     */
    @Override
    @Transactional
    public void publishAdopt(Adopt adopt) {
        //1.使用百度地图API,根据地址获取经纬度
        Point point = DistanceUtil.getPoint(adopt.getAddress());

        //2.查询所有商家店铺 得到List<shop集合>
        List<Shop> shops = shopMapper.loadAll();
        //3.循环这个集合，查找一个距离发布人填写的地址最近的商家店铺
        Shop nearestShop = DistanceUtil.getNearestShop(point, shops);

        //4.adopt对象设置shop_id
        adopt.setShop(nearestShop);
        adopt.setShop_id(nearestShop.getId());

        //5.保存adopt数据
        adoptMapper.save(adopt);

    }

    /**
     * 后台管理：商家后台处理寻主消息
     * @param id
     * @param handleResult
     * @return
     */
    @Override
    public AjaxResult handleAdopt(Long id, Integer handleResult) {
        if (handleResult==1){
            //就是接受
            //1.先通过ID查询寻主消息
            Adopt adopt = adoptMapper.loadById(id);

            //2.根据id去修改 寻主消息的状态  改为已处理（0）
            adopt.setState(0);
            adopt.setUser_id(null);
            adoptMapper.update(adopt);

            //3.创建一个宠物对象，保存到t_pet表中，状态默认为下架状态(-1) 不设置user_id,该宠物已经变成商家店铺的宠物
            Pet pet = new Pet();
            pet.setName(adopt.getName());
            pet.setCostprice(adopt.getPrice());
            pet.setResources(adopt.getResources());
            //下架状态0
            pet.setState(0);
            pet.setType_id(adopt.getPetType().getId());
            pet.setShop_id(adopt.getShop_id());
            pet.setAdopt_id(id);
            petMapper.save(pet);

            //4.保存宠物详情
            PetDetail petDetail = new PetDetail();
            petDetail.setPet_id(pet.getId());
            petDetail.setIntro(adopt.getTitle());
            petDetail.setAdoptNotice(adopt.getTitle() + "[毛色：" + adopt.getCoatColor().getName() + "，年龄：" + adopt.getAge() + "]");
            petMapper.savePetDetail(petDetail);

            return AjaxResult.me();
        }else {
            //拒绝
            /**
             * 拒绝
             *  距离最近的商家店铺拒绝了，那就继续自动分配给距离第二近的商家店铺（修改shop_id）
             *  另外还可以添加一张寻主消息处理记录表（记录处理结果：id、寻主消息id、发布人用户id、shop_id、message、reason原因、被拒绝的次数）
             *  后端添加一个逻辑：若被拒绝次数达到5次，就不再继续自动分配，给出提示消息：您发布的寻主消息已被多次拒绝，请适当降低出售价格！
             */

        }
        return null ;
    }
}
